/*
2021-10-10 
https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840
*/
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>

using namespace std;
typedef pair<int,int> PII;
const int N=505,M=N*N;
int h[N],e[M],ne[M],w[N],l[M],idx;
int dist[N];
int cnt[N],num[N];
int pre[N];
int n,m,s,d;
int st[N];
int ans[N],cnt0;

void add(int a,int b,int c)
{
    e[idx]=b,ne[idx]=h[a],l[idx]=c,h[a]=idx++;
}

void dij(int s)
{
    memset(dist,0x3f,sizeof dist);
    priority_queue<PII,vector<PII>,greater<PII>>q;
    q.push({0,s});
    cnt[s]=1;
    num[s]=w[s];
    
    while(q.size())
    {
        auto t=q.top();
        q.pop();
        int ver=t.second,dis=t.first;
        if(st[ver]) continue;
        st[ver]=1;
        
        for(int i=h[ver];~i;i=ne[i])
        {
            int j=e[i],k=l[i];
            if(dist[j]>dis+k)
            {
                dist[j]=dis+k;
                cnt[j]=cnt[ver];
                num[j]=num[ver]+w[j];
                pre[j]=ver;
                q.push({dist[j],j});
            }
            else if(dist[j]==dis+k)
            {
                if(num[j]<num[ver]+w[j])
                    num[j]=num[ver]+w[j],pre[j]=ver;
                cnt[j]+=cnt[ver];
            }
        }
        
    }
    
}

int main()
{
    memset(h,-1,sizeof h);
    cin>>n>>m>>s>>d;
    for(int i=0;i<n;i++) cin>>w[i];
    
    for(int i=0;i<m;i++)
    {
        int a,b,c;
        cin>>a>>b>>c;
        add(a,b,c);
        add(b,a,c);
    }
    
    dij(s);
    
    cout<<cnt[d]<<' '<<num[d]<<endl;
    ans[cnt0++]=d;
    while(pre[d]!=s)
    {
        ans[cnt0++]=pre[d];
        d=pre[d];
    }
    ans[cnt0++]=s;
    reverse(ans,ans+cnt0);
    for(int i=0;i<cnt0;i++) 
    {
        cout<<ans[i];
        if(i!=cnt0-1) cout<<' ';
    }
    return 0;
}
